package com.woniu.service;

import com.alibaba.fastjson.JSONObject;
import com.woniu.vo.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;


public interface WechatService {

    /**
     * 微信登录小程序授权登录
     *
     * @param code code
     * @return 登录成功用户信息
     */
    TokenVO weChatAuthorizeProgramLogin(JSONObject code);

//    /**
//     * 微信登录小程序获取手机号，返回
//     * @param json
//     * @return
//     */
//    TokenVO getBindingPhone(JSONObject json);

    /**
     * 小程序登录凭证校验
     *
     * @return 小程序登录校验对象
     */
    WeChatMiniAuthorizeVo miniAuthCode(JSONObject code);

    /**
     * 获取小程序accessToken
     *
     * @return 小程序accessToken
     */
    String getMiniAccessToken();

    /**
     * 获取公众号accessToken
     *
     * @return 公众号accessToken
     */
    String getPublicAccessToken();

    /**
     * 记录订阅
     *
     * @param templateId 模板表ID
     * @return
     */
    boolean subscription(Integer templateId);

    /**
     * 微信小程序发送订阅消息
     *
     * @param templateMessage 消息对象
     * @return 是否发送成功
     */
    Boolean sendMiniSubscribeMessage(ProgramTemplateMessageVo templateMessage);

    /**
     * 微信公众号发送模板消息
     *
     * @param templateMessage 模板消息对象
     * @return 是否发送成功
     */
    Boolean sendPublicTemplateMessage(ProgramTemplateMessageVo templateMessage);

    /**
     * 组装数据和发送订阅消息
     *
     * @param templateId 模板ID
     * @param temMap     发送内容
     * @param openId     用户openId
     */
    void pushMiniTemplateMessage(String templateId, HashMap<String, String> temMap, String openId);

    /**
     * 组装数据和发送公众号消息
     *
     * @param openid 用户openid
     */
    void pushPublicCustomMessage(String openid);

    /**
     * 转账到用户零钱
     *
     * @param outBatchNo 商家批次号
     * @param money      金额
     * @param openid     用户openid
     * @return
     */
    boolean transferAccounts(String outBatchNo, Integer money, String openid);

    /**
     * 公众号发送小程序卡片消息
     *
     * @param publicCustomProgramMessageVo 消息对象
     * @return
     */
    Boolean sendPulicCustomProgramMessage(PublicCustomProgramMessageVo publicCustomProgramMessageVo);


    /**
     * 公众号发送文本消息
     *
     * @param publicCustomTextMessageVo 消息对象
     * @return
     */
    Boolean sendPulicCustomTextMessage(PublicCustomTextMessageVo publicCustomTextMessageVo);

    /**
     * 公众号获取用户openid列表
     * @param nextOpenid 下一个openid，也就是从哪个openid开始查起
     * @return
     */
    WechatPublicUserListVO getPublicUserList(String nextOpenid);

    /**
     * 公众号获取用户详情
     * @param openid 用户openid
     * @return
     */
    WechatPublicUserVO getPublicUser(String openid);






}
